package com.fzj.example.socket.tcp.block;

import java.io.*;
import java.net.Socket;
import java.net.UnknownHostException;

/**
 * TCP的客户端部分：
 * 1.客户端要创建socket对象，并绑定主机的端口。
 * 2.创建输出流OutputStream对象，并创建传出数据用的数据包DataOutputStream（OutputStream）。
 * 3.利用DataOutputStream.writeXXX(Data)将数据写入到数据包中。
 * 4.创建输入流InputStream对象，并创建DataInputStream（IntputStream）对象接收来自服务器端的数据。
 * 5.利用DataInputStream.read()读取来自服务器端的数据
 *
 * @author fzj
 */
public class TcpClient2 {

    private static final String IPADDRESS="localhost";
    private static final int PORT=9000;

    public static void main(String[] args) throws IOException {
        Socket client = null;
        try {
            System.out.println("连接到主机：" + IPADDRESS + "，端口号：" + PORT);
            //抛出异常：UnknownHostException、IOException；
            client=new Socket(IPADDRESS,PORT);

            System.out.println("远程主机地址：" + client.getRemoteSocketAddress());

            //创建输出流，将创建的输出流和客户端绑定
            OutputStream outToServer=client.getOutputStream();

            //创建数据传输包，并将之与输出流绑定
            DataOutputStream out=new DataOutputStream(outToServer);

            //向数据传输包中写入数据
            out.writeUTF("Hello , this data package from " + client.getLocalSocketAddress());

            //创建输入流，接收来自服务器端的数据
            InputStream inFromServer=client.getInputStream();
            DataInputStream in=new DataInputStream(inFromServer);
            System.out.println("服务器响应：" + in.readUTF());

        } catch (UnknownHostException e) {
            e.printStackTrace();

        }finally{
            //关闭连接
            client.close();
        }

    }

}
